s(Gap) --> np(nogap), vp(Gap).
np(nogap) --> det, n, optrel.
np(nogap) --> pn.
np(gap(np)) --> [].
vp(Gap) --> tv, np(Gap).
vp(nogap) --> iv.

optrel --> [].
optrel --> relpron, vp(nogap).
optrel --> relpron, s(gap(np)).
det --> [Det], {det(Det)}.
det(a). det(every).
det(some). det(the).
n --> [N], {n(N)}.
n(author). n(book).
n(professor). n(program).
n(programmer). n(student).
pn --> [PN], {pn(PN)}.
pn(begriffsschrift). pn(bertrand).
pn(bill). pn(gottlob).
pn(lunar). pn(principia).
pn(shrdlu). pn(terry).
tv --> [TV], {tv(TV)}.
tv(concerns). tv(met).
tv(ran). tv(wrote).
iv --> [IV], {iv(IV)}.
iv(halted).
relpron --> [Relpron], {relpron(Relpron)}.
relpron(that). relpron(who).
relpron(whom).
 
